package cn.lg.soar.redis.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Author: luguoxiang
 * @Date: 2021-05-18 15:47
 * @Description: 分布式-读锁
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ClusterReadLock {

    /**
     * 锁名称（前缀），格式：lock:value():key()
     * @return
     */
    String value();

    /**
     * 锁的key（支持参数列表索引，支持spring el表达式）
     * @return
     */
    String key() default "";

    /**
     * 竞争锁等待时间（必须大于 0），单位：毫秒
     * @return
     */
    long waitTime() default 30_000;

    /**
     * 锁有效时间（必须大于 0），单位：毫秒
     * @return
     */
    long leaseTime() default 60_000;

    /**
     * 获取锁失败时
     * @return
     */
    String message() default "他人正在操作，请稍后重试！";
}
